<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			
			function fun(a,b){
				console.log("a = "+a);
				console.log("b = "+b);
				// alert(this.obj);
			}
			
			// call()和apply()
			// 这两个方法都是函数对象的方法,需要通过函数对象来调用
			// 当对函数调用call()和apply()都会调用函数执行
			// 在调用call()和apply()可以将一个对象指定为第一个参数
			// 此时这个对象将会成为函数执行的this
			// call()方法可以将实参在对象之后依次传递
			// apply()方法需要将实参封装到一个数组中统一传递
			
			// this的情况:
			// 	1.以函数形式调用时,this永远都是window
			// 	2.以方法的形式调用时,this是调用方法的对象
			// 	3.以构造函数的形式调用时,this是新创建的那个对象
			// 	4.使用call和apply调用时,this是指定的那个对象
			
			var obj = {
				name:"obj",
				sayName:function(){
					alert(this.name);
				}
			};
			var obj2 = {name:"obj2"};
			
			// fun.call();
			// fun.apply();
			// fun();
			
			fun.call(obj,2,3);
			fun.apply(obj2,[2,3]);
			// fun();
			
			obj.sayName.apply(obj2);
			
		</script>
	</head>
	<body>
	</body>
</html>
